package Gestores.DtoObjects;

import Gestores.DaoInterfaces.EmailDAO;
import Gestores.DataBaseLink;
import Gestores.Entidades.EntidadEmail;
import Gestores.NucleoBaseDatos;
import java.sql.ResultSet;
import java.util.ArrayList;

public class EmailDTO implements EmailDAO {

    private DataBaseLink gestor;

    public EmailDTO() {
        this.gestor = NucleoBaseDatos.getInstance();
    }

    private ArrayList<Object> devolverEnLista(ResultSet resultado) throws Exception {
        ArrayList<Object> lista = new ArrayList<Object>();
        while (resultado.next()) {
            EntidadEmail eEmail = new EntidadEmail();
            eEmail.setIdAfiliado(resultado.getString(1));
            eEmail.setMail(resultado.getString(2));
            lista.add(eEmail);
        }
        return lista;
    }

    @Override
    public ArrayList<Object> buscarPorIdAfiliado(String id) throws Exception {
        ResultSet resultado = gestor.executeSql("Call BuscarEmailPorIdAfiliado('" + id + "');");
        return devolverEnLista(resultado);
    }

    @Override
    public ArrayList<Object> buscarPorMail(String correo) throws Exception {
        ResultSet resultado = gestor.executeSql("Call BuscarEmailPorMail('" + correo + "');");
        return devolverEnLista(resultado);
    }

    @Override
    public void insertar(Object objeto) throws Exception {
        EntidadEmail eEmail = (EntidadEmail) objeto;
        gestor.executeSql("Call InsertarEmail(" + eEmail.cadenaParaInsercion() + ");");
    }

    @Override
    public void actualizar(Object primaryKey, Object objeto) throws Exception {
        String idAfiliado = (String) primaryKey;
        EntidadEmail eEmail = (EntidadEmail) objeto;
        gestor.executeSql("Call ActualizarEmail('" + idAfiliado + "'," + eEmail.cadenaParaActualizacion() + ");");
    }

    @Override
    public void eliminacionFisica(Object objeto) throws Exception {
        EntidadEmail eEmail = (EntidadEmail) objeto;
        gestor.executeSql("Call EliminarEmail(" + eEmail.cadenaParaEliminacion() + ");");
    }

    @Override
    public void eliminacionLogica(Object objeto) throws Exception {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public ArrayList<Object> listarTabla() throws Exception {
        ResultSet resultado = gestor.executeSql("Call ListarEmail()");
        return devolverEnLista(resultado);
    }

    @Override
    public boolean existe(String mail) throws Exception {
        ResultSet resultSet = gestor.executeSql("Select ExisteEmail('" + mail + "');");
        resultSet.next();
        return resultSet.getBoolean(1);
    }
}
